#!/bin/bash

# 获取文件绝对路径
compressed_file="$1"
# 获取当前文件的目录
cur_dir="${compressed_file%/*}"
# 如果未指定解压目录，则默认为当前目录
target_dir="${2:-$cur_dir}"
# 获取文件扩展名
file_extension="${compressed_file##*.}"

# 检查压缩文件是否存在
if [ ! -f "$compressed_file" ]; then
    echo "错误: 压缩文件 '$compressed_file' 不存在"
    exit 1
fi

# 检查目标目录是否存在，如果不存在则创建
if [ ! -d "$target_dir" ]; then
    echo "目标目录 '$target_dir' 不存在，正在创建..."
    mkdir -p "$target_dir"
fi

# 根据文件扩展名选择解压命令
case "$file_extension" in
    gz)
        if [[ "$compressed_file" == *.tar.gz ]]; then
            tar -xzvf "$compressed_file" -C "$target_dir" > /dev/null
        else
            gunzip -c "$compressed_file" > "$target_dir/$(basename "${compressed_file%.gz}")" > /dev/null
        fi
        ;;
    zip)
        # 使用 unzip 解压，并尝试处理中文文件名
        if command -v unzip >/dev/null 2>&1; then
            unzip -O gbk "$compressed_file" -d "$target_dir" > /dev/null
        else
            echo "错误: 未安装 unzip，请先安装 unzip（支持中文文件名需安装 unzip-iconv）"
            exit 1
        fi
        ;;
    tar)
        tar -xvf "$compressed_file" -C "$target_dir" > /dev/null
        ;;
    rar)
        if command -v unrar >/dev/null 2>&1; then
            unrar x "$compressed_file" "$target_dir" > /dev/null
        else
            echo "错误: 未安装 unrar，请先安装 unrar"
            exit 1
        fi
        ;;
    7z)
        if command -v 7z >/dev/null 2>&1; then
            7z x "$compressed_file" -o"$target_dir" > /dev/null
        else
            echo "错误: 未安装 7z，请先安装 p7zip"
            exit 1
        fi
        ;;
    *)
        echo "错误: 不支持的文件扩展名 '$file_extension'"
        exit 1
        ;;
esac

# 检查解压是否成功
if [ $? -eq 0 ]; then
    echo "解压成功: '$compressed_file' 到 '$target_dir'"
else
    echo "错误: 解压失败"
    exit 1
fi
